package com.zhdl.modules.demo.service.impl;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.project.common.service.impl.BaseServiceImpl;
import com.querydsl.jpa.impl.JPAQuery;
//import com.zhdl.modules.demo.entity.QTestDemo;
import com.zhdl.modules.demo.entity.TestDemo;
import com.zhdl.modules.demo.entity.TestDesc;
import com.zhdl.modules.demo.repository.TestDemoRepository;
import com.zhdl.modules.demo.repository.TestDescRepository;
import com.zhdl.modules.demo.service.TestDemoService;
import com.zhdl.modules.demo.service.mapstruct.TestDemoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Author: zhangyy
 * @Email: zhang10092009@hotmail.com
 * @Date: 2023/4/3 12:15:19
 * @Version: v1.0
 * @Modified:
 * @Description:
 */
@Service
public class TestDemoServiceImpl extends BaseServiceImpl<String, TestDemo, TestDemoRepository> implements TestDemoService {

    private final TestDescRepository testDescRepository;

    private final TestDemoMapper testDemoMapper;

    @Autowired
    public TestDemoServiceImpl(TestDescRepository testDescRepository, TestDemoMapper testDemoMapper) {
        this.testDescRepository = testDescRepository;
        this.testDemoMapper = testDemoMapper;
    }

//    @Override
//    public List<TestDemo> findByConditions(String address, String name) {
//        QTestDemo qTestDemo = QTestDemo.testDemo;
//        JPAQuery<TestDemo> query = jpaQueryFactory().selectFrom(qTestDemo);
//        if (StrUtil.isNotBlank(address)) {
//            query.where(qTestDemo.address.eq(address));
//        }
//        if (StrUtil.isNotBlank(name)) {
//            query.where(qTestDemo.name.contains(name));
//        }
//        return query.fetch();
//    }
//
//    @Override
//    public Page<TestDemo> demoPage(String address, String name, Pageable pageable) {
//        QTestDemo qTestDemo = QTestDemo.testDemo;
//        JPAQuery<TestDemo> query = jpaQueryFactory().selectFrom(qTestDemo);
//        if (StrUtil.isNotBlank(address)) {
//            query.where(qTestDemo.address.eq(address));
//        }
//        if (StrUtil.isNotBlank(name)) {
//            query.where(qTestDemo.name.contains(name));
//        }
//        // 添加分页限制
//        query.offset(pageable.getOffset());
//        query.limit(pageable.getPageSize());
//        List<TestDemo> list = query.fetch();
//        long total = query.fetchCount();
//        return new PageImpl<>(list, pageable, total);
//    }

    @Override
    @Transactional
    public TestDemo saveDesc(TestDemo entity) {
        TestDemo testDemo = super.insert(entity);
        TestDesc testDesc = new TestDesc();
        testDesc.setId(RandomUtil.randomNumbers(6));
        testDesc.setTestDemoId(testDemo.getId());
        testDesc.setDescription(RandomUtil.randomString(4));
        testDesc.setPhone(RandomUtil.randomString(11));
        testDescRepository.save(testDesc);
        return testDemo;
    }

    @Override
    public List<TestDemo> findByConditions(String address, String name) {
        return null;
    }

    @Override
    public Page<TestDemo> demoPage(String address, String name, Pageable pageable) {
        return null;
    }

//    @Override
//    public Page<TestDemoDescDto> findPageDesc(String address, String name, String phone, Pageable pageable) {
//        QTestDemo qTestDemo = QTestDemo.testDemo;
//        QTestDesc qTestDesc = QTestDesc.testDesc;
//        JPAQuery<TestDemo> query = jpaQueryFactory().selectFrom(qTestDemo);
////                .leftJoin(qTestDemo.id, qTestDesc);
//        if (StrUtil.isNotBlank(address)) {
//            query.where(qTestDemo.address.eq(address));
//        }
//        if (StrUtil.isNotBlank(name)) {
//            query.where(qTestDemo.name.contains(name));
//        }
//        if (StrUtil.isNotBlank(phone)) {
//            query.where(qTestDesc.phone.eq(phone));
//        }
//        // 添加分页限制
//        query.offset(pageable.getOffset());
//        query.limit(pageable.getPageSize());
//        // 执行查询并返回分页结果
//        List<TestDemoDescDto> orderList = query.fetch()
//                .stream()
//                .map(testDemoMapper::toDto)
//                .toList();
//        long total = query.fetchCount();
//        return new PageImpl<>(orderList, pageable, total);
////        return null;
//    }
}
